#! coding:utf-8

from web.app.represent_feature import VectorGeneration
from web.app.retrieval import MedicalRecordRetrieval


# def test_feature_vector():
#     # 特征向量化对象
#     vec_gen = VectorGeneration()
#     # 患者基本信息，格式：[年龄] [体重] [身高]
#     user_info = '28 48.5 162'
#     # 问诊单，格式：[问题1]##[选项1[$$选项2[...]]]@@[问题2]##[选项1[$$选项2[...]]]@@...
#     inquiry = ('您的身体是否有疼痛？##乳房胀痛$$下腹两侧疼@@您的睡眠情况如何？##睡觉打鼾@@您的出汗情况如何？##'
#                '心胸部出汗明显@@您的白带情况是否正常？##白带正常')
#     # 患者自述，普通文本
#     report = '患者子宫内膜异位症，伴有咳嗽'
#     # 生成特征向量
#     feature_vec = vec_gen.generate_feature_vector(user_info, report, inquiry)
#     print(len(feature_vec))
#     for i in range(len(feature_vec)):
#         if feature_vec[i] != 0.0:
#             print('{0}: {1}'.format(i, feature_vec[i]))
retrieval = MedicalRecordRetrieval(topk=100)
def get_list_user():
    return retrieval.get_list_user()

def test_retrieval(user_info,report,inquiry,tongue_feature):
    vec_gen = VectorGeneration()



    # 生成病症信息的特征向量
    feature_vec = vec_gen.generate_feature_vector(user_info, report, inquiry, tongue_feature)
    # 调用检索模型，获取top k个相似病历
    sim_records = retrieval.get_topk_similar(feature_vec)
    res_records = retrieval.get_topk_similar_with_score(user_info, report, inquiry, tongue_feature, sim_records)

    # 取出病历结果
    # 每个病历以字典形式存储，其包含4个键：patient information（患者信息）、condition report（患者自述）
    # inquiry sheet（问诊单信息）、tongue url（舌照URL）

    # for record in res_records:
    #     # 患者信息
    #     print('index: {0}'.format(record['index']))
    #     print('patient information: {0}'.format(record['patient_information']))
    #     print('score patient information: {0}'.format(record['score_patient_information']))
    #     # 患者自述
    #     print('condition report: {0}'.format(record['condition_report']))
    #     print('score condition report: {0}'.format(record['score_condition_report']))
    #     # 问诊单信息
    #     print('inquiry sheet: {0}'.format(record['inquiry_sheet']))
    #     print('score inquiry sheet: {0}'.format(record['score_inquiry_sheet']))
    #     # 舌照URL
    #     print('tongue url: {0}'.format(record['tongue_url']))
    #     print('tongue vector: {0}'.format(record['tongue_vector']))
    #     print('score tongue vector: {0}'.format(record['score_tongue_vector']))
    #     print()

    return res_records

if __name__ == '__main__':
    # test_feature_vector()
    # 患者基本信息，格式：[年龄] [体重] [身高]
    user_info = '17 49 160'
    # 问诊单，格式：[问题1]##[选项1[$$选项2[...]]]@@[问题2]##[选项1[$$选项2[...]]]@@...
    inquiry = (
        '''您身体的冷热感受如何？##冷热正常@@您的出汗情况如何？##出汗正常@@您的身体是否有疼痛？##无疼痛@@您的身体除疼痛外，是否还有以下不适？##无其他不适@@您的眼部是否有不适？##无眼部不适@@您的耳部是否有不适？##无耳部不适@@您的口部是否有不适？##无口部不适@@您的咽喉是否有不适？##无咽喉不适@@您是否有咳嗽喘痰等症状？##无咳嗽喘痰@@您的睡眠情况如何？##睡眠正常@@您的口渴及饮水情况如何？##饮水正常@@您的大便频率如何？##每天或隔天一次@@您的大便性状如何？##粘稠@@您的大便颜色如何？##黄色@@您的小便频率及尿量如何？##频率正常（5-8次/日）@@您的小便色质如何？##淡黄@@您现在是否处于以下特殊阶段？##非特殊阶段@@您的生育情况如何？##未生育@@您的流产情况如何？##未曾流产@@您的月经是否规律？##不规律@@您的月经经量是否正常？##正常@@您的月经经色、经质如何？##鲜红$$有血块@@您的白带情况是否正常？##正常''')
    # 患者自述，普通文本
    report = '我是之前17岁看过月经不调的。做过检查都没问题。之前您开的中药已经吃完了'
    # 舌照特征的14维向量，向量元素可以是整数（int）也可以是字符串（str）
    tongue_feature = [2, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0]
    s = test_retrieval(user_info, report, inquiry, tongue_feature)
